#!/bin/sh

#
# Test U-boot support for setting variables
#

. "$(cd "$(dirname "$0")" && pwd)/common.sh"


# Create a starter uboot environment block
# This is created by running:
#
# $ printf "d=4\na=1\nb=2\nc=3" | mkenvimage -s "512" - | base64
base64_decode >$WORK/starting-uboot-env.img <<EOF
bDDI12Q9NABhPTEAYj0yAGM9MwAA////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////8=
EOF

cat >$CONFIG <<EOF
define(UBOOT_ENV_OFFSET, 0)

file-resource uboot-env.img {
    host-path = "$WORK/starting-uboot-env.img"
}

uboot-environment uboot-env {
    block-offset = \${UBOOT_ENV_OFFSET}
    block-count = 1
}

task complete {
    on-resource uboot-env.img {
        raw_write(\${UBOOT_ENV_OFFSET})
    }

    on-finish {
       uboot_unsetenv(uboot-env, "a")
       uboot_unsetenv(uboot-env, "c")
       uboot_unsetenv(uboot-env, "nonexistent")  # shouldn't fail
    }
}
EOF

# Create the expected result from setting the variables. fwup ensures
# that the variables are sorted when it writes them out, so this ordering
# is guaranteed.
#
# To recreate, run:
#
# printf "b=2\nd=4" | mkenvimage -s "512" - | base64
#
base64_decode >$WORK/expected-env.img <<EOF
2iBPK2I9MgBkPTQAAP//////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////8=
EOF

# Create the firmware file, then "burn it"
$FWUP_CREATE -c -f $CONFIG -o $FWFILE
$FWUP_APPLY -a -d $IMGFILE -i $FWFILE -t complete

cmp_bytes 512 $WORK/expected-env.img $IMGFILE

